class: center middle main-title section-title-1 top-logo .small[ # Tidydata y manipulación de datos ] .class-info[ <br> **Sesión N° 5**<br> 05 septiembre 2021<br> **Análisis de datos estadÃsticos en R** <br> .pull-right.small[ **Profesora** Valentina Andrade de la Horra <br> **Ayudantes** Dafne Jaime y Nicolás Godoy .tiny[Universidad Alberto Hurtado<br> ] ] ] --- class: title title-inv-1 # Contenidos Sesión 5 -- .box-2.medium.sp-after-half[**Estructura de datos**] -- .box-3.medium.sp-after-half[**Cálculos agregados**] -- .box-4.medium.sp-after-half[**Tidy data**] -- .box-5.medium.sp-after-half[**Combinar dara**] ??? --- class: center middle main-title section-title-1 top-logo name: basics # 1: Estructura de datos --- class: title title-inv-1 # 1: Estructura de datos - Hasta ahora hemos asumido una estructura de datos *ad hoc* a los análisis que queremos realizar -- - No siempre los datos vendrán "limpios" o con la estructura columna-fila que necesitamos -- - No siempre nuestros datos vendrán completos y necesitaremos "unir" distintas fuentes de información --- class: title title-inv-1 # Estructura de los datos - También ocurrirá que vamos a querer hacer cálculos agregados -- - Algunos agregando por cada observación o cada columna .can-edit.key-likes[Pensemos algunos ejemplos... 1. 2. 3. ] --- class: center middle main-title section-title-2 top-logo # Creación de variables agregadas --- class: title section-title-2 top-logo # `rowwise()` para agrupar filas - Construcción de Ãndices para cada observación - Sumativos y promedio ```r datos %>% #Especificamos que trabajaremos con el dataframe datos rowwise() %>% #Especificamos que agruparemos por filas mutate(ing_tot = sum(ss_t, svar_t, reg_t)) #Creamos una nueva variable llamada ing_tot, sumando los valores de ss_t, svar_t y reg_t para cada fila ``` --- class: title section-title-2 top-logo # `group_by()` para agrupar columnas - Cálculos en base a caracterÃsticas de una o varias columnas -- - Calcular el promedio de edad según comuna ( `group_by()` + `mutate()`) -- - Calcular una nueva variable que diga cuántas mujeres tengo en mis datos ( `group_by()` + `summarise()`) --- ```r datos %>% group_by(sexo) %>% #Espeficicamos que agruparemos por sexo summarise(media = mean(ing_tot)) #Creamos una columna llamada media, calculando la media ingresos con la función `mean` ``` --- layout: false class: center middle main-title section-title-2 top-logo # ¡Vamos a practicar! --- # ¿Dónde? .box-inv-1[[Descargar el zip del sesión 5 el sitio del curso](https://learn-r-uah.netlify.app/content/05-content/)] --- class: title title-2 # 1. Recursos de la práctica - Datos: [Encuesta Suplementaria de Ingresos (ESI) en su versión 2020](https://www.ine.cl/estadisticas/sociales/ingresos-y-gastos/encuesta-suplementaria-de-ingresos). - [**Libro de códigos**](https://www.ine.cl/docs/default-source/encuesta-suplementaria-de-ingresos/bbdd/manual-y-guÃa-de-variables/2020/personas-esi-2020.pdf?sfvrsn=f196cb4e_4). --- # Tarea Bonus - Con CASEN 2020 calcular - Cuántas personas en la muestra son de FONASA - Cuántas personas en la muestra son Mujeres y de FONASA - Replicar los cálculos de ingresos del hogar y contrastar con la variable original obtenida *Entrega*: próximo lunes 13 de septiembre --- class: center middle main-title section-title-3 top-logo # Tidydata --- class: center middle main-title section-title-3 top-logo # Paquete `tidyr` --- class: title section-title-3 top-logo # `tidyr` para solucionar los problemas de estructura de datos - La estructura **"limpia"** considera a las observaciones en las filas y las variables en las columnas -- - Esto no siempre podrá ser asÃ. ---  --- class: title section-title-3 top-logo # Las tres reglas de un buen dataset - `tidyr` 1. Cada variable tiene que estar su propia columna 2. Cada observación tiene que estar en su propia fila 3. Cada valor tiene que estar en su propia celda. --- class: title section-title-3 top-logo # ¿Cumple con las reglas? ```r #> # A tibble: 3 x 3 #> country `1999` `2000` #> * <chr> <int> <int> #> 1 Afghanistan 745 2666 #> 2 Brazil 37737 80488 #> 3 China 212258 213766 ``` - ¿Qué problema de procesamiento nos podrÃa producir? --- class: title section-title-3 top-logo ```r #> # A tibble: 6 x 3 #> country year cases #> <chr> <chr> <int> #> 1 Afghanistan 1999 745 #> 2 Afghanistan 2000 2666 #> 3 Brazil 1999 37737 #> 4 Brazil 2000 80488 #> 5 China 1999 212258 #> 6 China 2000 213766 ``` --- # `pivot_*()` - Para hacer ese paso de filas a columnas (o viceversa) se hace un procedimiento que se llama *pivote* - `pivot_longer()` y `pivot_wider()` (son los inversos) --- # Wide format - Pensemos en el primer ejemplo donde a1, a2 y a3 son los años  --- # Long format  - Como resultado inverso --- # ¿Cómo ocupar pivot_longer? ```r table %>% pivot_longer(c(`1999`, `2000`), names_to = "year", values_to = "cases") #> # A tibble: 6 x 3 #> country year cases #> <chr> <chr> <int> #> 1 Afghanistan 1999 745 #> 2 Afghanistan 2000 2666 #> 3 Brazil 1999 37737 #> 4 Brazil 2000 80488 #> 5 China 1999 212258 #> 6 China 2000 213766 ``` ---  --- # Cómo ocupar pivot wider ```r table2 #> # A tibble: 12 x 4 #> country year type count #> <chr> <int> <chr> <int> #> 1 Afghanistan 1999 cases 745 #> 2 Afghanistan 1999 population 19987071 #> 3 Afghanistan 2000 cases 2666 #> 4 Afghanistan 2000 population 20595360 #> 5 Brazil 1999 cases 37737 #> 6 Brazil 1999 population 172006362 #> # … with 6 more rows ``` - ¿Se cumplen las reglas de tidy data? (hint: fÃjense en *type*) --- ```r table2 %>% pivot_wider(names_from = type, values_from = count) #> # A tibble: 6 x 4 #> country year cases population #> <chr> <int> <int> <int> #> 1 Afghanistan 1999 745 19987071 #> 2 Afghanistan 2000 2666 20595360 #> 3 Brazil 1999 37737 172006362 #> 4 Brazil 2000 80488 174504898 #> 5 China 1999 212258 1272915272 #> 6 China 2000 213766 1280428583 ``` ---  --- class: center middle main-title section-title-3 top-logo # ¡Vamos a practicar pivotes en `tidyr`! --- class: center middle main-title section-title-4 top-logo # ¿Qué pasa si la regla N°3 no se cumple? -- ## `separate()` y `unite` --- class: title section-title-4 top-logo # Columnas con información de más de una variable ```r table3 #> # A tibble: 6 x 3 #> country year rate #> * <chr> <int> <chr> #> 1 Afghanistan 1999 745/19987071 #> 2 Afghanistan 2000 2666/20595360 #> 3 Brazil 1999 37737/172006362 #> 4 Brazil 2000 80488/174504898 #> 5 China 1999 212258/1272915272 #> 6 China 2000 213766/1280428583 ``` - ¿Qué columna pasa por alto ese supuesto? -- - ¿Qué problema nos podrÃa traer? --- ```r table3 %>% separate(rate, into = c("cases", "population")) #> # A tibble: 6 x 4 #> country year cases population #> <chr> <int> <chr> <chr> #> 1 Afghanistan 1999 745 19987071 #> 2 Afghanistan 2000 2666 20595360 #> 3 Brazil 1999 37737 172006362 #> 4 Brazil 2000 80488 174504898 #> 5 China 1999 212258 1272915272 #> 6 China 2000 213766 1280428583 ``` ---  --- class: title section-title-4 top-logo # `separate()` y algunos argumentos adicionales - Especificar el separador (sep = ) ```r table3 %>% separate(rate, into = c("cases", "population"), sep = "/") ``` - Especificar si queremos que se cambie la clase de la variable ```r table3 %>% separate(rate, into = c("cases", "population"), convert = TRUE) #> # A tibble: 6 x 4 #> country year cases population #> <chr> <int> <int> <int> #> 1 Afghanistan 1999 745 19987071 #> 2 Afghanistan 2000 2666 20595360 #> 3 Brazil 1999 37737 172006362 #> 4 Brazil 2000 80488 174504898 #> 5 China 1999 212258 1272915272 #> 6 China 2000 213766 1280428583 ``` --- class: title section-title-4 top-logo # `unite()` el proceso inverso  --- class: title section-title-4 top-logo # `unite()` - Será muy útil para construir variables "combinatorias" ```r table5 %>% unite(new, century, year, sep = "") #> # A tibble: 6 x 3 #> country new rate #> <chr> <chr> <chr> #> 1 Afghanistan 1999 745/19987071 #> 2 Afghanistan 2000 2666/20595360 #> 3 Brazil 1999 37737/172006362 #> 4 Brazil 2000 80488/174504898 #> 5 China 1999 212258/1272915272 #> 6 China 2000 213766/1280428583 ``` --- class: center section-title section-title-4 animated fadeIn # ¡Vamos a practicar con ESI! --- class: center section-title section-title-5 animated fadeIn # Unir datos --- class: title section-title-5 # Unir datos - No es una tarea fácil unir un set de datos *x e y* -- **Recomendaciones** 1. Conocer bien los datos x e y 2. Verifica las unidades de observación 3. Define tu variable "llave" o **key** 4. Define qué procedimiento quieres hacer --- # 4. Procedimientos de unión  --- # `merge()` ```r merge(a, b, by = "key") ```  --- # bind_cols y bind_rows - `bind_*` para "pegar" o columnas o filas  --- layout: false class: center section-title section-title-6 animated fadeIn # En sÃntesis -- .box-2.medium.sp-after-half[**Estructura de datos**] -- .box-3.medium.sp-after-half[**Cálculos agregados**] -- .box-4.medium.sp-after-half[**Tidy data**] -- .box-5.medium.sp-after-half[**Combinar data**] --- class: center middle main-title section-title-4 top-logo # ¡Y a no olvidar el flujo para el análisis! -- ## Nos permite hacernos amigas/os más rápido del programa --- .center[ ] --- layout: false .box-1[¿Y eso era?] -- .center[ ] --- layout: false class: center middle main-title section-title-1 top-logo .small[ # Tidydata y manipulación de datos ] .class-info[ <br> **Sesión N° 5**<br> 05 septiembre 2021<br> **Análisis de datos estadÃsticos en R** <br> .pull-right.small[ **Profesora** Valentina Andrade de la Horra <br> **Ayudantes** Dafne Jaime y Nicolás Godoy .tiny[Universidad Alberto Hurtado<br> ] ] ] ??? https://c.tenor.com/7mxJp29REVkAAAAC/scaryfeet-monstersinc.gif